查看原文
其他

Max/MSP/Jitter 教程11 - 矩阵混合

kidult00 科技无障碍 2022-11-03

Max/MSP/Jitter 教程 01 - 什么是矩阵?
Max/MSP/Jitter 教程 02 - Jitter 对象的属性
Max/MSP/Jitter 教程 03 - 播放 QuickTime 视频
Max/MSP/Jitter 教程 04 - 创建矩阵
Max/MSP/Jitter 教程 05 - 矩阵的数学运算
Max/MSP/Jitter 教程 06 - 控制视频播放
Max/MSP/Jitter 教程 07 - ARGB 颜色
Max/MSP/Jitter 教程 08 - 调整颜色
Max/MSP/Jitter 教程 09 - 调整图像颜色
Max/MSP/Jitter 教程 10 - 交叉渐变

00 翻译自 Cycling74 的 Max/MSP/Jitter 官方文档:Tutorial 9: More Mixing
https://docs.cycling74.com/max7/tutorials/jitterchapter09

本教程探讨用 jit.scalebiasjit.op 实现交叉渐变的技巧。它比 jit.xfade 方法复杂一些,但更灵活。

混合和交叉淡化

上一章讲解了 jit.xfade 用缩放(乘法)和加法以不同的比例混合两个矩阵。本教程将使用 jit.scalebiasjit.op 对象来自动执行这些数学运算。

这样做有一些好处。首先能清楚地演示混合和交叉渐变的数学过程。其次能看到 jit.op 如何对两个输入矩阵做数学运算。(教程 5 中展示了 jit.op 和标量值如何作用于单个矩阵)。第三,它可以分别指定两个矩阵的缩放因子,比 jit.xfade 更灵活。最后,jit.op 可以实现许多不同类型的数学运算,我们可以尝试其他组合矩阵的方法来得到不同的视觉效果。

再说 Mixing

打开教程 patch


用乘法和加法混合/交叉渐变矩阵

缩放因子设置为 0~1 之间的 jit.scalebias 将两个视频 scaled down(变暗)。下面会看到用 jit.op 的不同:两个入口的输入都是矩阵。这时 jit.op 分别对每个值执行指定的数学运算,将左矩阵中的每个值与右矩阵中的对应值配对。这样我们可以把两个矩阵的所有值相加来混合图像。

这些乘法和加法的结果与 jit.xfade 对象做内部运算的结果一样。可以试试用 patch 右上角的控件来交叉渐变视频(与上一章几乎完全相同)。

启动 metro 并使用 Mixer slider 执行从视频 A 到 B 的交叉渐变。

请注意,渐变值直接作为视频 B 的缩放因子,同时 !- 1 对象用 1 减去该值,得到视频 A 的缩放因子。这样,两个缩放因子的和总是等于 1,就像在 jit.xfade 中一样。

使用其他运算符组合矩阵

加法是两个矩阵最常见的运算。更改 jit.op 的 op 属性,可以尝试许多其他运算并查看其视觉效果。

Transition Time 数字框中设置一个非常长的交叉渐变时间(例如 10000 ms)。在 Operator 弹出菜单中选择 + 以外的运算符。现在点击 Go To switch 开始渐变,可以看到两个视频矩阵的运算如何进行。

弹出菜单包含 jit.op 各种运算符中的一部分。以下是菜单中选项的简要说明。

  • + 把 B 值加到 A

  • -m 从 A 中减去 B,然后取模将结果折算回所需的数值范围

  • max 使用 A B 中较大的值

  • absdiff从 A 中减去 B,然后取差值的绝对值

  • | “按位或”; 二进制操作,A 或 B 为 1,结果为 1

  • ^ “按位独占或”; 二进制操作,A 和 B 值不相同,结果为 1,否则为 0

  • > 如果 A 大于 B,结果为 1(或 char 255),否则为 0

  • < 如果 A 小于 B,结果为 1(或 char 255),否则为 0

  • >p 如果 A 大于 B,结果为 A,否则为 0

  • <p 如果 A 小于 B,结果为 A,否则为 0


其他运算符请查看 jit.op 对象参考文档。

你也可以直接拖动 jit.scalebias 上方的数字框,单独设置混合比例。还可以尝试超过 0~1 范围的值。

jit.scalebias vs. jit.op @op *

这个 patch 用 jit.scalebias 来做缩放乘法,而没有用 jit.op 与 * 运算符。为什么呢?

jit.op 操作 char 数据时,val 属性范围是 0.0~1.0(浮点数)或 0~255(整数)。如果想将 char 数据乘以 0~1 的某个值,用 jit.op 就可以。如果想乘以其他范围的值,就要用 jit.scalebias,它允许 scale 的值超过 0~1 范围。 jit.scalebias 仅用于处理 4 平面 char 矩阵,在这个例子中没问题。所以在这个 patch 中,因为是在 4 平面 char 矩阵上做运算,并且想使用超过 0~1 范围的缩放因子,所以使用了 jit.scalebias

小结

你可以用 jit.op 对两个不同矩阵中的值执行各种数学运算。 jit.op 对每个值执行指定的数学运算,将左矩阵中的每个值与右矩阵中的对应值配对。当两个矩阵的 dim,planecount 和 type 属性不同时,jit.op 使用左入口矩阵的属性。在混合两个视频图像时,不同的数学运算符可以生成各种视觉效果。


友情提示:独自折腾 Max 易患上癔症……不妨入群互助

👇👇👇


更多 Max/MSP 应用,请翻阅 MakeNoise 系列

MakeNoise01 - 声音是什么?
MakeNoise02 - 频率和音高
MakeNoise03 - 振幅/响度/音量/增益 大乱斗
MakeNoise04 - 波形和相位
MakeNoise05 - Envelope 包络(ADSR)
MakeNoise06 - 音色和均衡器(EQ)
MakeNoise07 - 音频的「分辨率」
MakeNoise08 - 振荡器和滤波器
MakeNoise09 - 压缩 Compression
MakeNoise10 - 延时和混响

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存